﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SGT_DAL._STG_DALTableAdapters;
using SGT_DAL;

namespace SGT_ON
{
    /// <summary>
    /// Clase utilizada para la presentación y propiedades derivadas.
    /// </summary>
    public partial class Aseguradora
    {
        /// <summary>
        /// Se estado tiene que ser Activo|Inactivo
        /// </summary>
        public string EstadoString
        {
            get
            {
                if (EstaActiva == true)
                    return "Activa";
                else
                    return "Eliminada";
            }
            set
            {
                if (value.ToUpper() == "ACTIVA")
                    EstaActiva = true;
                else if (value.ToUpper() == "INACTIVA")
                    EstaActiva = false;
                else
                    throw new ArgumentException("No se ha especificado correctamente EstadoString puede ser: 'Activa'|'Inactiva'");
            }
        }
        public System.Drawing.Color EstadoColor
        {
            get
            {
                if (EstaActiva == false)
                {
                    return System.Drawing.Color.Red;
                }
                else
                {
                    return System.Drawing.Color.Green;
                }
            }
        }
        public bool EstadoPuedeActivar
        {
            get
            {
                if (EstaActiva == false)
                    return true;
                else
                    return false;
            }
        }
        public bool EstadoPuedeInactivar
        {
            get
            {
                if (EstaActiva == false)
                    return false;
                else
                    return true;
            }
        }
        public string DiasDuracionCuentaCorrienteString
        {
            get
            {
                return DiasDuracionCuentaCorriente.ToString();
            }
            set
            {
                DiasDuracionCuentaCorriente = int.Parse(value);
            }
        }
    }
    /// <summary>
    /// Clase base con la lógica de negocio
    /// </summary>
    [System.ComponentModel.DataObject]
    public partial class Aseguradora
    {
        #region Atributos
        protected int _id;
        protected string _RazonSocial;
        protected string _CUIT;
        protected string _Descripcion;
        protected string _ContactoNombre;
        protected string _ContactoTelefono;
        protected bool _EstaActiva;
        protected string _Email;
        protected string _Direccion;
        protected int _DiasDuracionCuentaCorriente;

        //Objetos asociados
        #endregion

        #region Propiedades
        public int ID
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }
        public string RazonSocial
        {
            get
            {
                return _RazonSocial;
            }
            set
            {
                _RazonSocial = value;
            }
        }
        public string CUIT
        {
            get
            {
                return _CUIT;
            }
            set
            {
                _CUIT = value;
            }
        }
        public string Descripcion
        {
            get
            {
                return _Descripcion;
            }
            set
            {
                _Descripcion = value;
            }
        }
        public string ContactoNombre
        {
            get
            {
                return _ContactoNombre;
            }
            set
            {
                _ContactoNombre = value;
            }
        }
        public string ContactoTelefono
        {
            get
            {
                return _ContactoTelefono;
            }
            set
            {
                _ContactoTelefono = value;
            }
        }
        public bool EstaActiva
        {
            get
            {
                return _EstaActiva;
            }
            set
            {
                _EstaActiva = value;
            }
        }
        public string Email
        {
            get
            {
                return _Email;
            }
            set
            {
                _Email = value;
            }
        }
        public string Direccion
        {
            get
            {
                return _Direccion;
            }
            set
            {
                _Direccion = value;
            }
        }
        public int DiasDuracionCuentaCorriente
        {
            get
            {
                return _DiasDuracionCuentaCorriente;
            }
            set
            {
                _DiasDuracionCuentaCorriente = value;
            }
        }

        //Objetos asociados

        //Propiedades derivadas
        #endregion

        #region Interfase DAL
        //objeto de la capa DAL
        private static AseguradoraTableAdapter _AseguradoraAD;
        protected static AseguradoraTableAdapter Adaptador
        {
            get
            {
                if (_AseguradoraAD == null)
                    _AseguradoraAD = new AseguradoraTableAdapter();

                return _AseguradoraAD;
            }
        }
        protected static Aseguradora ObtenerPorID(int pID)
        {
            _STG_DAL.AseguradoraDataTable _dt;

            _dt = Adaptador.ObtenerPorID(pID);

            // si tiene algo,
            if (_dt.Rows.Count > 0)
                return AsignarRowAObjeto((_STG_DAL.AseguradoraRow)_dt.Rows[0]);

            return null;
        }
        protected static Aseguradora AsignarRowAObjeto(_STG_DAL.AseguradoraRow pRow)
        {
            Aseguradora _Aseguradora = new Aseguradora();
            if (pRow != null)
            {
                _Aseguradora = new Aseguradora();
                _Aseguradora.ID = pRow.ID;
                _Aseguradora.RazonSocial = pRow.RazonSocial;
                _Aseguradora.CUIT = pRow.CUIT;
                _Aseguradora.Descripcion = pRow.Descripcion;
                _Aseguradora.ContactoNombre = pRow.ContactoNombre;
                _Aseguradora.ContactoTelefono = pRow.ContactoTelefono;
                _Aseguradora.EstaActiva = pRow.EstaActiva;
                _Aseguradora.Email = pRow.Email;
                _Aseguradora.Direccion = pRow.Direccion;
                _Aseguradora.DiasDuracionCuentaCorriente = pRow.DiasDuracionCuentaCorriente;

            }
            return _Aseguradora;
        }
        protected Aseguradora Insertar(string pRazonSocial,string pCUIT,string pDescripcion,string pContactoNombre,string pContactoTelefono,bool pEstaActiva,string pEmail,string pDireccion,int pDiasDuracionCuentaCorriente)
        {
            ID = int.Parse(Adaptador.Insertar(pRazonSocial, pCUIT, pDescripcion, pContactoNombre, pContactoTelefono, pEstaActiva, pEmail, pDireccion, pDiasDuracionCuentaCorriente).ToString());
            return this;
        }
        protected bool Actualizar(string pRazonSocial, string pCUIT, string pDescripcion, string pContactoNombre, string pContactoTelefono, bool pEstaActiva, string pEmail, string pDireccion, int pDiasDuracionCuentaCorriente, int pID)
        {
            if (0 < Adaptador.Actualizar(pRazonSocial, pCUIT, pDescripcion, pContactoNombre, pContactoTelefono, pEstaActiva, pEmail, pDireccion, pDiasDuracionCuentaCorriente, pID))
                return true;
            else
                return false;
        }
        public void Eliminar()
        {
            Aseguradora _Aseguradora = Aseguradora.ObtenerPorID(this.ID);
            _Aseguradora.EstaActiva = false;
            _Aseguradora.Actualizar();
        }
        protected static AseguradoraColeccion AsignarAseguradoraTableAdapterAAseguradoraColeccion(_STG_DAL.AseguradoraDataTable pDataTable)
        {
            AseguradoraColeccion _Aseguradoraes = new AseguradoraColeccion();
            Aseguradora _Aseguradora;

            if ((pDataTable != null)
                && (pDataTable.Rows.Count > 0))
            {
                foreach (_STG_DAL.AseguradoraRow _row in pDataTable.Rows)
                {
                    _Aseguradora = AsignarRowAObjeto(_row);
                    if (_Aseguradora != null)
                        _Aseguradoraes.Add(_Aseguradora);
                }
            }
            return _Aseguradoraes;
        }
        public static AseguradoraColeccion ObtenerTodosLosAseguradoras()
        {
            return AsignarAseguradoraTableAdapterAAseguradoraColeccion(Adaptador.ObtenerTodos());
        }
        public static AseguradoraColeccion ObtenerPorTexto(string pTexto)
        {
            if ((pTexto == null)
                || (pTexto == ""))
                return ObtenerTodosLosAseguradoras();

            return AsignarAseguradoraTableAdapterAAseguradoraColeccion(Adaptador.ObtenerPorTexto(pTexto));
        }
        ///// <summary>
        ///// Si el valor ingresado es "" o nulo, traigo todos
        ///// </summary>
        ///// <param name="pTexto"></param>
        ///// <returns></returns>
        //public static AseguradoraColeccion ObtenerPorTexto(string pTexto)
        //{
        //    if ((pTexto == null)
        //        || (pTexto == ""))
        //        return AsignarAseguradoraTableAdapterAAseguradoraColeccion(Adaptador.ObtenerTodosLosActivos());
        //    else
        //        return AsignarAseguradoraTableAdapterAAseguradoraColeccion(Adaptador.ObtenerPorTexto(pTexto));
        //}

        #endregion

        #region Métodos
        public Aseguradora()
        {
            AsignarValoresIniciales();
        }

        public void AsignarValoresIniciales()
        {
            _id = -1;
            RazonSocial = "";
            CUIT = "";
            Descripcion = "";
            ContactoNombre = "";
            ContactoTelefono = "";
            EstaActiva = true;
            Email = "";
            Direccion = "";
            DiasDuracionCuentaCorriente = 0;
        }

        public static Aseguradora CrearAseguradora()
        {
            Aseguradora _Aseguradora = new Aseguradora();
            return _Aseguradora;
        }
        public static Aseguradora CrearAseguradora(int pID)
        {
            Aseguradora _Aseguradora = ObtenerPorID(pID);
            return _Aseguradora;
        }
        public void Actualizar()
        {
            Actualizar(RazonSocial, CUIT, Descripcion, ContactoNombre, ContactoTelefono, EstaActiva, Email, Direccion, DiasDuracionCuentaCorriente, ID);
        }
        public Aseguradora Insertar()
        {
            return Insertar(RazonSocial, CUIT, Descripcion, ContactoNombre, ContactoTelefono, EstaActiva, Email, Direccion, DiasDuracionCuentaCorriente);
        }
        #endregion

        #region Metodos para datasource

        public void Actualizar(Aseguradora pAseguradora)
        {
            if (pAseguradora != null)
                pAseguradora.Actualizar();
        }
        public Aseguradora Insertar(Aseguradora pAseguradora)
        {
            if (pAseguradora != null)
                return pAseguradora.Insertar();
            return null;
        }
        public void Eliminar(Aseguradora pAseguradora)
        {
            pAseguradora.Eliminar();
        }
        #endregion
    }
    [System.ComponentModel.DataObject]
    public class AseguradoraColeccion : System.Collections.CollectionBase
    {
        public void Add(Aseguradora pAseguradora)
        {
            this.List.Add(pAseguradora);
        }
        public void AddUnico(Aseguradora pAseguradora)
        {
            foreach (Aseguradora _Aseguradora in this)
                if (pAseguradora.ID == _Aseguradora.ID)
                    return;
            this.List.Add(pAseguradora);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public void Remove(Aseguradora pAseguradora)
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].ID == pAseguradora.ID)
                {
                    Remove(i);
                    return;
                }

            }
        }
        public Aseguradora this[int index]
        {
            get { return ((Aseguradora)(this.List[index])); }
            set { this.List[index] = value; }
        }
        public void ActualizarAseguradoraes(AseguradoraColeccion pAseguradoraes)
        {
            foreach (Aseguradora _Aseguradora in pAseguradoraes)
            {
                _Aseguradora.Actualizar();
            }
        }
        public void ActualizarAseguradora(Aseguradora pAseguradora)
        {
            pAseguradora.Actualizar();
        }

        #region Metodos de colección

        #endregion
        #region Para datasource
        public void Insertar(Aseguradora pAseguradora)
        {
            pAseguradora.Insertar(pAseguradora);
        }
        #endregion
    }
}



